package com.pithypan.mapper;

import com.pithypan.entity.FileInfo;
import com.pithypan.vo.FileInfoQuery;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 文件信息 Mapper 接口
 * </p>
 *
 * @author author
 * @since 2023-11-23
 */
@Repository
public interface FileInfoMapper {

    //根据条件查询总记录数
    public Integer findTotalCount(@Param("query") FileInfoQuery query);

    //根据条件分页查询结果集
    public ArrayList<FileInfo> findListByPage(@Param("query")FileInfoQuery query);

    //查询用户所有上传文件的大小总和
    public Long selectUseSpace(@Param("userId") String userId);

    //根据Md5值和文件状态查询文件
    public List<FileInfo> findListByMd5AndStatus(@Param("md5") String md5, @Param("status") Integer status);

    //根据文件名查询总记录数
    public Integer selectFileCount(@Param("query") FileInfoQuery query);

    //添加文件
    public void insert(FileInfo fileInfo);

    //根据文件id和用户id查询文件
    public FileInfo findByFileIdAndUserId(@Param("fileId") String fileId, @Param("userId") String userId);

    //根据文件id、用户id、转码状态进行文件更新
    public void updateFileStatusWithOldStatus(@Param("fileId") String fileId, @Param("userId") String userId, @Param("oldStatus") Integer oldStatus, @Param("updateInfo") FileInfo updateInfo);

    //根据条件查找目录
    public List<FileInfo> selectFileList(@Param("query") FileInfoQuery query);

    //根据文件id、用户id更新文件
    public void updateByFileIdAndUserId(@Param("userId") String userId, @Param("fileId") String fileId, @Param("updateInfo") FileInfo updateInfo);

    /**
     * 批量修改文件的删除状态
     * @param updateInfo    修改字段
     * @param userId        用户id
     * @param filePidList   以父id为条件进行更改
     * @param fileIdList    以文件id为条件进行更改
     * @param oldDelFlat    修改之前的删除状态
     */
    public void updateFileDelFlagBatch(@Param("updateInfo") FileInfo updateInfo, @Param("userId") String userId,
                                       @Param("filePidList") List<String> filePidList, @Param("fileIdList") List<String> fileIdList, @Param("oldDelFlag") Integer oldDelFlat);

    /**
     * 从数据库中删除数据
     * @param userId
     * @param filePidList   以父id为条件进行删除
     * @param fileIdList    以文件id为条件进行删除
     * @param oldDelFlat
     */
    public void delFileBatch(@Param("userId") String userId, @Param("filePidList") List<String> filePidList,
                             @Param("fileIdList") List<String> fileIdList, @Param("oldDelFlag") Integer oldDelFlat);


    //删除指定用户的所有文件
    public void delFileByUserId(@Param("userId") String userId);


    //查询文件，且关联user表，查询用户名
    public List<FileInfo> findFileAndNickName(@Param("query") FileInfoQuery query);

    //将集合中的所有文件持久化
    public void insertBatch(@Param("list") List<FileInfo> copyFileList);

}
